diff -Naur csvutils-0.9.3+20161218_e57951b/src/csvcheck.c csvutils-0.9.3+20161218_e57951b.patched/src/csvcheck.c
--- csvutils-0.9.3+20161218_e57951b/src/csvcheck.c	2022-01-26 02:05:12.660602834 -0500
+++ csvutils-0.9.3+20161218_e57951b.patched/src/csvcheck.c	2022-01-26 02:33:11.553450216 -0500
@@ -89,6 +89,8 @@
   }
 }
 
+int errcnt = 0;
+
 void
 check_file(char *filename)
 {
@@ -112,6 +114,7 @@
     fp = fopen(filename, "rb");
     if (fp == NULL) {
       fprintf(stderr, "Failed to open file %s: %s\n", filename, strerror(errno));
+      errcnt++;
       csv_free(&p);
       return;
     }
@@ -121,18 +124,21 @@
     if ((retval = csv_parse(&p, buf, bytes_read, NULL, NULL, NULL)) != bytes_read) {
       if (csv_error(&p) == CSV_EPARSE) {
         printf("%s: malformed at byte %lu\n", filename ? filename : "stdin", (unsigned long)pos + retval + 1);
+        errcnt++;
         goto end;
       } else {
         printf("Error while processing %s: %s\n", filename ? filename : "stdin", csv_strerror(csv_error(&p)));
+        errcnt++;
         goto end;
       }
     }
     pos += 1024;
   }
 
-  if (csv_fini(&p, NULL, NULL, NULL) != 0)
+  if (csv_fini(&p, NULL, NULL, NULL) != 0) {
     printf("%s: missing closing quote at end of input\n", filename ? filename : "stdin");
-  else
+    errcnt++;
+  } else
     printf("%s well-formed\n", filename ? filename : "data is");
 
   end:
@@ -186,5 +192,5 @@
     check_file(NULL);
   }
 
-  return EXIT_SUCCESS;
+  return (errcnt ? EXIT_FAILURE : EXIT_SUCCESS);
 }
